package model

const (
	FieldsPathPerson       = "PersonListObject.PersonObject"
	FieldsSinglePathPerson = "PersonObject"
)

// 人员对象特征属性
type Person struct {
	// 人员标识; 必选;
	PersonID string
	// 信息分类; 必选; 人工采集还是自动采集
	InfoKind InfoType
	// 来源标识; 必选; 来源图像信息标识;required
	SourceID string
	// 设备编码; 特定条件下必选; 设备编码，自动采集必选
	DeviceID string
	// 左上角X坐标; 特定条件下必选; 人的轮廓外接矩形在画面中的位置，记录矩形框的左上角坐标及右下角坐标，自动采集记录时为必选
	// required
	LeftTopX int
	// 左上角Y坐标; 特定条件下必选;
	// required
	LeftTopY int
	// 右下角X坐标; 特定条件下必选;
	// required
	RightBtmX int
	// 右下角Y坐标; 特定条件下必选;
	// required
	RightBtmY int
	// 位置标记时间; 特定条件下必选; 人工采集时有效;required
	LocationMarkTime string
	// 人员出现时间; 特定条件下必选;required
	PersonAppearTime string
	// 人员消失时间; 可选;required
	PersonDisAppearTime string
	// 证件种类; 可选;
	IDType IDType
	// 证件号码; 可选; 有效证件号码
	IDNumber string
	// 姓名; 可选; 人员的中文姓名全称
	Name string
	// 曾用名; 可选; 曾经在户籍管理部门正式登记注册、人事档案中正式记载的姓氏名称
	UsedName string
	// 绰号; 可选; 使用姓名及曾用名之外的名称
	Alias string
	// 性别代码; 可选;
	GenderCode GenderType
	// 年龄上限; 可选; 最大可能年龄
	AgeUpLimit int
	// 年龄下限; 可选; 最小可能年龄
	AgeLowerLimit int
	// 民族代码; 可选; 中国各名族的罗马字母拼写法和代码
	EthicCode string
	// 国籍代码; 可选; 世界各国和地区名称代码
	NationalityCode string
	// 籍贯省市县代码; 可选;
	NativeCityCode string
	// 居住地行政区划; 可选;
	ResidenceAdminDivision string
	// 汉语口音代码; 可选; 汉语口音编码规则
	ChineseAccentCode string
	// 单位名称; 可选; 人员所在的工作单位
	PersonOrg string
	// 职业类别代码; 可选; 职业分类与代码，不包含代码中“—”
	JobCategory string
	// 同行人数; 可选; 被标注人的同行人数
	AccompanyNumber int
	// 身高上限; 可选; 人的身高最大可能值，单位为厘米（cm）
	HeightUpLimit int
	// 身高下限; 可选; 人的身高最小可能值，单位为厘米（cm）
	HeightLowerLimit int
	// 体型; 可选;
	BodyType string
	// 肤色; 可选;
	SkinColor string
	// 发型; 可选;
	HairStyle HairStyleType
	// 发色; 可选;
	HairColor ColorType
	// 姿态; 可选;
	Gesture PostureType
	// 状态; 可选;
	Status PersonStatusType
	// 脸型; 可选;
	FaceStyle string
	// 脸部特征; 可选;
	FacialFeature string
	// 体貌特征; 可选;
	PhysicalFeature string
	// 体表特征; 可选;
	BodyFeature string
	// 习惯动作; 可选;
	HabitualMovement HabitualActionType
	// 行为; 可选;
	Behavior BehaviorType
	// 行为描述;
	BehaviorDescription string
	// 附属物;
	Appendant AppendageType
	// 附属物描述;
	AppendantDescription string
	// 伞颜色; 可选;
	UmbrellaColor ColorType
	// 口罩颜色; 可选;
	RespiratorColor ColorType
	// 帽子款式; 可选;
	CapStyle HatStyleType
	// 帽子颜色; 可选;
	CapColor ColorType
	// 眼镜款式; 可选;
	GlassStyle GlassesStyleType
	// 眼镜颜色; 可选;
	GlassColor ColorType
	// 围巾颜色; 可选;
	ScarfColor ColorType
	// 包款式; 可选;
	BagStyle BagStyleType
	// 包颜色; 可选;
	BagColor ColorType
	// 上衣款式; 可选;
	CoatStyle CoatStyleType
	// 上衣长度; 可选;
	CoatLength CoatLengthType
	// 上衣颜色; 可选;
	CoatColor ColorType
	// 裤子款式; 可选;
	TrousersStyle PantsStyleType
	// 裤子颜色; 可选;
	TrousersColor ColorType
	// 裤子长度; 可选;
	TrousersLen PantsLengthType
	// 鞋子款式; 可选;
	ShoesStyle ShoesStyleType
	// 鞋子颜色; 可选;
	ShoesColor ColorType
	// 是否驾驶员; 特定条件下必选; 人工采集时必选0：否；1：是；2：不确定
	IsDriver IsDriverType
	// 是否涉外人员; 特定条件下必选; 0：否；1：是；2：不确定
	IsForeigner IsForeignerType
	// 护照证件种类; 可选;
	PassportType EnPassportType
	// 出入境人员类别代码; 可选; 出入境人员分类代码
	ImmigrantTypeCode string
	// 是否涉恐人员; 特定条件下必选; 0：否；1：是；2：不确定;required
	IsSuspectedTerrorist IsSuspectedTerroristType
	// 涉恐人员编号; 可选;
	SuspectedTerroristNumber string
	// 是否涉案人员; 特定条件下必选; 0：否；1：是；2：不确定
	IsCriminalInvolved IsCriminalInvolvedType
	// 涉案人员专长代码; 可选;
	CriminalInvolvedSpecilisationCode string
	// 体表特殊标记; 可选;
	BodySpeciallMark string
	// 作案手段; 可选;
	CrimeMethod string
	// 作案特点代码; 可选;
	CrimeCharacterCode string
	// 在逃人员编号; 可选;
	EscapedCriminalNumber string
	// 是否在押人员; 特定条件下必选; 0：否；1：是；2：不确定，人工采集必填
	IsDetainees IsDetaineesType
	// 看守所编码; 可选;
	DetentionHouseCode string
	// 在押人员身份; 可选; 详细取值见附录B
	DetaineesIdentity DetaineesIdentityType
	// 在押人员特殊身份; 可选;
	DetaineesSpecialIdentity string
	// 成员类型代码; 可选;
	MemberTypeCode string
	// 是否被害人; 可选; 人工采集时必选0：否；1：是；2：不确定;required
	IsVictim IsVictimType
	// 被害人种类; 可选;
	VictimType string
	// 受伤害程度; 可选;
	InjuredDegree InjuredDegreeType
	// 尸体状况代码; 可选;
	CorpseConditionCode string
	// 是否可疑人; 特定条件下必选; 人工采集时必选0：否；1：是；2：不确定;required
	IsSuspiciousPerson IsSuspiciousPersonType
	// 图像列表; 可选; 可以包含0个或者多个子图像对象
	SubImageList *SubImageInfoListObject
	// 抓拍时间
	ShotTime string
	// 特征值列表
	FeatureList *FeatureInfoListObject
	// 归属分类标签标识
	TabID string

	//来源视图库 id
	SourceViewID string
}

func (c *Person) GetSubImageList() *SubImageInfoListObject {
	return c.SubImageList
}

func (c *Person) GetFeatureList() *FeatureInfoListObject {
	return c.FeatureList
}

func (c *Person) SetFeatureList(param *FeatureInfoListObject) {
	c.FeatureList = param
}

// 批量创建人员请求
type CreatePersonArrReq struct {
	PersonListObject struct {
		PersonObject []*Person
	}
}

// 查询人员列表请求
type GetPersonArrReq struct {
	Person
}

// 获取查询人脸对象
type GetPersonArrResp struct {
	//PageRecordNum    int
	//StartNum         int
	//TotalNum         int
	PersonListObject struct {
		PersonObject []*Person
	}
}

type GetPersonResp struct {
	PersonObject *Person
}
